import { useUserStore } from '@/store/user'

type TRole = 'admin' | 'user'

/**
 * 获取菜单，菜单最多支持三级
 * @returns array 菜单数组
 */
const getMenu = (): Array<IMenu> => {
  const store = useUserStore()
  const user = store?.user
  const adminMenu = [
    {
      name: 'home',
      path: '/home',
      title: '首页',
      icon: 'DesktopOutlined',
    },
    {
      name: 'examples',
      path: '/examples',
      title: '所有例子',
      icon: 'UserOutlined',
      children: [{
        name: 'example',
        path: '/example',
        title: '例子',
      }, {
        name: 'editor',
        path: '/editor',
        title: '富文本编辑器',
      }]
    }
  ]

  const userMenu = [
    {
      name: 'home',
      path: '/home',
      title: '首页',
      icon: 'home-outlined',
    },
  ]

  const menu: Array<IMenu> = []

  const whiteListMap = {
    // 超级管理员
    admin: adminMenu,
    // 普通用户
    user: userMenu,
  }
  // 如果用户信息存在
  if (user) {
    // const { userRelations } = user
    // 角色暂时默认为 超级管理员，等后面需要的话根据 userRelations 确定角色
    const roles = [{
      name: 'admin'
    }, {
      name: 'user'
    }]

    roles.forEach((item: any) => {
      const roleMenu = whiteListMap[(item.name as TRole)]
      // 处理一级菜单
      // x 是第一级的菜单
      roleMenu.forEach((x: IMenu) => {
        const menuItems = menu.filter((m: IMenu) => {
          return m.name === x.name
        })
        // 如果没有找到就加到菜单中
        if (menuItems.length < 1) {
          menu.push(x)
        } else {
          // 找到了看看当前要加的菜单有没有子级
          // y 是第二级的菜单
          x.children?.forEach((y: IMenu) => {
            // secodeChildren 当前二级菜单集合
            let secodeChildren = menuItems[0].children
            if (!secodeChildren || secodeChildren.length < 1) {
              secodeChildren = [y]
            } else {
              const secodeMenuItems = secodeChildren.filter((sm: IMenu) => {
                return sm.name === y.name
              })
              // 在 secodeMenuItems 里没有存在 y 这个二级菜单
              if (secodeMenuItems.length < 1) {
                secodeChildren.push(y)
              } else {
                // 找到了看看当前要加的菜单有没有子级
                y.children?.forEach((z: IMenu) => {
                  let thirdChildren = secodeMenuItems[0].children
                  if (!thirdChildren || thirdChildren.length < 1) {
                    thirdChildren = [z]
                  } else {
                    const thirdMenuItems = thirdChildren.filter((tm: IMenu) => {
                      return tm.name === z.name
                    })
                    // 在 thirdMenuItems 里没有存在 z 这个三级菜单
                    if (thirdMenuItems.length < 1) {
                      thirdChildren.push(z)
                    }
                    // 找到了就不再添加
                  }
                })
              }
            }
          })
        }
      })
    })
  }
  return menu
}

export default getMenu
